# coding=utf-8

import os
import sys
import argparse
from docx import Document

def convert_docx_to_txt(docx_path, txt_path):
    """将docx文件转换为txt文件"""
    try:
        # 读取docx文件
        doc = Document(docx_path)
        
        # 提取所有文本
        full_text = []
        for para in doc.paragraphs:
            if para.text.strip():  # 只添加非空段落
                full_text.append(para.text)
        
        # 写入txt文件
        with open(txt_path, 'w', encoding='utf-8') as f:
            f.write('\n'.join(full_text))
        print(f"成功转换: {docx_path} -> {txt_path}")
    except Exception as e:
        print(f"转换失败 {docx_path}: {str(e)}")

def process_directory(src_dir, dest_dir):
    """递归处理目录中的所有docx文件"""
    # 确保目标目录存在
    os.makedirs(dest_dir, exist_ok=True)
    
    # 遍历目录
    for root, dirs, files in os.walk(src_dir):
        for file in files:
            if file.endswith('.docx'):
                # 构建完整的docx文件路径
                docx_path = os.path.join(root, file)
                # 构建目标txt文件路径
                txt_filename = os.path.splitext(file)[0] + '.txt'
                txt_path = os.path.join(dest_dir, txt_filename)
                
                # 转换文件
                convert_docx_to_txt(docx_path, txt_path)

def main():
    # 设置命令行参数
    parser = argparse.ArgumentParser(description='将目录中的docx文件转换为txt文件')
    parser.add_argument('src', nargs='?', help='源目录路径，包含要转换的docx文件')
    parser.add_argument('dest', nargs='?', help='目标目录路径，用于保存转换后的txt文件')
    
    args = parser.parse_args()
    
    # 获取程序所在目录作为默认值
    default_dir = os.path.dirname(os.path.abspath(__file__))
    
    # 设置源目录和目标目录
    src_dir = args.src if args.src else default_dir
    dest_dir = args.dest if args.dest else default_dir
    
    print(f"源目录: {src_dir}")
    print(f"目标目录: {dest_dir}")
    
    process_directory(src_dir, dest_dir)
    print("处理完成！")

if __name__ == "__main__":
    main()

